﻿using System;
using System.Collections.Generic;
using Bastanteo.Dominio;

namespace Bastanteo.Negocio
{
    public interface IAdministracionService
    {


        //PODER_____________________________________
        #region Operaciones de negocio poder
        Poder RegistrarPoder(String descripcion, String tipoProducto);
        void EliminarPoder(Int32 codigoPoder);
        #endregion

        #region Métodos de soporte para entidad poder
        Poder CrearPoder(Poder poderACrear);
        Poder ObtenerPoder(Int32 codigo);
        Poder ModificarPoder(Poder poderAModificar);
        ICollection<Poder> ListarPoderes();
        ICollection<Poder> ListarPoderPorDescripcion(String descripcion);
        #endregion

        //GRUPO_____________________________________
        #region Operaciones de negocio grupo
        Grupo RegistrarGrupo(String descripcion);
        #endregion

        #region Métodos de soporte para entidad grupo
        Grupo CrearGrupo(Grupo grupoACrear);
        Grupo ObtenerGrupo(Int32 codigo);
        Grupo ModificarGrupo(Grupo grupoAModificar);
        void EliminarGrupo(Grupo grupoAEliminar);
        ICollection<Grupo> ListarGrupos();
        ICollection<Grupo> ListarPorDescripcion(string descripcion);
        #endregion

        //CLIENTE___________________________________
        #region Operaciones de negocio Cliente
        Cliente RegistrarCliente(string ruc, string razonSocial, DateTime inicioOperaciones, String tipoEmpresa, Int32 empleados);
        #endregion

        #region Métodos de soporte para entidad cliente
        Cliente CrearCliente(Cliente clienteACrear);
        Cliente ObtenerCliente(Int32 codigo);
        Cliente ObtenerXRuc(String ruc);
        Cliente ModificarCliente(Cliente clienteAModificar);
        void EliminarCliente(Cliente clienteAEliminar);
        ICollection<Cliente> ListarClientes();
        ICollection<Cliente> ListarXRuc(String ruc);
        #endregion

        //REPRESENTANTE______________________________
        #region Operaciones de negocio para Representante

        Representante RegistrarRepresentante(Cliente cliente, String TipoDocumento, String NumeroDocumento, String Nombres, String Apellidos, Grupo Grupo, String Cargo);
        Representante ModificarRepresentante(Int32 CodigoRepresentante, Cliente cliente, String TipoDocumento, String NumeroDocumento, String Nombres, String Apellidos, Grupo Grupo, String Cargo);
        void EliminarRepresentante(Int32 CodigoRepresentante);

        #endregion

        #region Métodos de soporte para entidad Representante
        Representante ObtenerRepresentante(Int32 CodigoRepresentante);
        Representante ObtenerRepXDoc(String NumeroDocumento);
        ICollection<Representante> ListarRepresentante();
        #endregion

        //BASTANTEO_______________________________________________________________________________
        #region Operaciones de negocio bastanteo
        CBastanteo RegistrarBastanteo(Int32 CodigoGrupo, Int32 CodigoPoder, Double ImporteLimite,
                                    DateTime FechaVencimiento, string TipoIntervencion);

        CBastanteo EditarBastanteo(Int32 CodigoGrupo, Int32 CodigoPoder, Double ImporteLimite,
                                   DateTime FechaVencimiento, string TipoIntervencion);

        String VerificarPoderes(String ruc, String numeroDocumento, int poder, double importe);
        #endregion

        #region Métodos de soporte para entidad bastanteo
        CBastanteo CrearBastanteo(CBastanteo bastanteoACrear);
        CBastanteo ObtenerBastanteo(Int32 codigo);
        CBastanteo ModificarBastanteo(CBastanteo bastanteoAModificar);
        void EliminarBastanteo(CBastanteo bastanteoAEliminar);
        ICollection<CBastanteo> ListarBastanteos();
        #endregion

        //COMBINACION___________________________________
        #region Operaciones de negocio para BastanteoCombinacion
        BastanteoCombinacion AgregarCombinacion(Int32 codigoBastanteo, Int32 codigoGrupo);        
        #endregion

        #region Métodos de soporte para entidad BastanteoCombinacion
        BastanteoCombinacion ObtenerCombinacion(Int32 codigo);
        BastanteoCombinacion ObtenerXBastanteoYGrupo(Int32 codigoBastanteo, Int32 codigoGrupo);
        BastanteoCombinacion ModificarCombinacion(BastanteoCombinacion combinacionAModificar);
        void EliminarCombinacion(BastanteoCombinacion combinacionAModificar);
        ICollection<BastanteoCombinacion> ListarCombinacion();
        ICollection<BastanteoCombinacion> ListarGruposCombinacionXBastanteo(Int32 Codigobastanteo);
        #endregion


        



    }
}
